package com.ia2014.tp.portal2.ejb;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import com.ia2014.tp.portal2.entities.Usuario;
import com.ia2014.tp.portal2.vo.UsuarioVO;

/**
 * Session Bean implementation class AdministradorUsuariosBean
 */
@Stateless
public class AdministradorUsuariosBean implements AdministradorUsuarios {

	private static Logger logger = Logger.getLogger(AdministradorUsuariosBean.class);
	
	@PersistenceContext(unitName = "DAO")
    private EntityManager em;
	
    
    /**
     * Default constructor. 
     */
    public AdministradorUsuariosBean() {
        // TODO Auto-generated constructor stub
    }


	@Override
	public UsuarioVO autenticarUsuario(UsuarioVO usuarioVO) {		
		
		try{
			
			Query query = em.createQuery("from Usuario u where u.userLogin = :userLogin and u.password = :password");
			
			query.setParameter("userLogin", usuarioVO.getUserLogin());
			query.setParameter("password", usuarioVO.getPassword());
		
			Usuario usuario = (Usuario) query.getSingleResult();	
			
			if(usuario != null){
			
				usuarioVO = usuario.getVO();
				return usuarioVO;
				
			}else {
				
				return null;
				
			}
			
		} catch (NoResultException e) {
			logger.warn("No se obtuvo el usuario con UserLogin " + usuarioVO.getUserLogin());
			return null;
		}
		catch (Exception ex){
			logger.error("Error al autenticar el usuario con UserLogin " + usuarioVO.getUserLogin());
			logger.error(ex.toString());
			logger.debug("Stacktrace", ex);
			
			return null;
		}
	}


	@Override
	public UsuarioVO loadUsuario(UsuarioVO usuarioVO) {
		
		try{
			
			Query query = em.createQuery("from Usuario u where u.userLogin = :userLogin");
			
			query.setParameter("userLogin", usuarioVO.getUserLogin());
		
			Usuario usuario = (Usuario) query.getSingleResult();	
			
			if(usuario != null){
			
				usuarioVO = usuario.getVO();
				return usuarioVO;
				
			}else {
				
				return null;
				
			}
			
		} catch (NoResultException e) {
			logger.warn("No se obtuvo el usuario con UserLogin " + usuarioVO.getUserLogin());
			return null;
		}
		catch (Exception ex){
			logger.error("Error al autenticar el usuario con UserLogin " + usuarioVO.getUserLogin());
			logger.error(ex.toString());
			logger.debug("Stacktrace", ex);
			
			return null;
		}
	}

}
